# flaskext.py
from flask import current_app, Markup
from .core.renderer import convert_markdown_to_html
from .core.anchor import add_anchors_to_html
from .core.toc import generate_toc_html

class MarkdownRendererExtension:
    def __init__(self, app=None):
        if app is not None:
            self.init_app(app)

    def init_app(self, app):
        # 注册模板过滤器
        app.jinja_env.filters['markdown'] = self.render_markdown_with_toc

    def render_markdown_with_toc(self, markdown_text):
        """Jinja2模板过滤器，用于渲染Markdown并生成目录。"""
        if not markdown_text:
            return ''

        html_with_anchors, toc_html = process_markdown_with_toc(markdown_text)

        # 将HTML和目录HTML传递给模板上下文
        # 这通常在模板中处理，或者你可以返回一个包含两者的字典
        # 这里简化处理，假设模板会处理 toc_html
        current_app.g.markdown_html = html_with_anchors
        current_app.g.markdown_toc = toc_html

        # 返回带有锚点的HTML，目录通过模板变量获取
        return Markup(html_with_anchors)

# 在你的Flask应用中:
# from your_package import MarkdownRendererExtension
# markdown_ext = MarkdownRendererExtension()
# markdown_ext.init_app(app)
